package com.zhu.solution.arrayQuestion;

/*给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作，不能拷贝额外的数组。
尽量减少操作次数。

*/

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zhujiabao
 * @Date: 2021/12/08/11:26
 * @Description:
 */
public class Solution_8 {
    public static void main(String[] args) {
        int[] array = {0,0,0,1};
//        new Solution_8().moveZeroes(array);
        new Solution_8().moveZeroes_2(array);

        System.out.println("移动后的数组： " + Arrays.toString(array) );
    }

    public void moveZeroes(int[] nums) {
        if (nums == null)
            return ;
        if (nums.length == 0)
            return ;

        int length = nums.length;
        int zeroCount = 0;
        //查找数组中有多少个0
        for (int i= 0;i<length;i++){
            if (nums[i] == 0){
                zeroCount++;
            }
        }
        //如果数组中没有0或者全是0，那么不处理直接返回
        if (zeroCount == 0 || zeroCount==length)
            return;
        //将非0元素向前移动
        int i=0;
        for (int j=0; j<length;j++){
            if (nums[j] != 0) {
                nums[i] = nums[j];
                i++;
            }
        }
        //填充0元素
        for (;i<length;i++)
            nums[i] = 0;
    }

    /*别人的解法*/
    public void moveZeroes_2(int[] nums) {
        if (nums == null || nums.length == 0)
            return;
        int index = 0;
        //一次遍历，把非零的都往前挪
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0)
                nums[index++] = nums[i];
        }
        //后面的都是0,
        while (index < nums.length) {
            nums[index++] = 0;
        }
    }
}
